1
Государственные процессы и оптимизация хвостовых вызовов
AI019Lesson 7
00:00

В Эликсире процессы по умолчанию кратковременны; как только функция завершается, процесс прекращает работу. Чтобы создать долговременный, состоящий процесс, мы используем рекурсию, чтобы поддерживать процесс в цикле.

1. Оптимизация хвостовых вызовов (TCO)

Если абсолютное последнее действие функции — это вызов самой себя, виртуальная машина Эрланга (BEAM) выполняет Оптимизацию хвостовых вызовов. Вместо добавления нового фрейма в стек он просто перепрыгивает обратно к началу функции с новыми аргументами.

def factorial(n, acc), do: _fact(n-1, acc*n) # TCO
def factorial(n), do: n * factorial(n-1) # НЕ TCO
логика greet()вызов greet()TCO: повторное использование фрейма стека

2. Долговременное состояние

Состояние поддерживается передачей обновленных значений в качестве аргументов рекурсивному вызову. Благодаря оптимизации хвостовых вызовов эти аргументы заменяют исходные параметры в стеке без дополнительного потребления памяти, что позволяет циклам работать бесконечно.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>